package linkedlist.leetcode_88;
/*
    合并有序数组
 */

class Solution {
    /**
     *
     * @param nums1
     * @param m     nums1数组中元素的个数
     * @param nums2
     * @param n     nums2数组中元素的个数
     */
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        //异常判断
        if(nums1 == null || nums2 == null){
            return ;
        }

        //nums1中最后一个元素的索引
        int last1 = m - 1;
        //nums2中最后一个元素的索引
        int last2 = n - 1;

        //nums1的最后一个位置的索引
        int len = m + n - 1;

        while(last1 >= 0 && last2 >= 0){
            //直接写成三元表达式更简洁
            if(nums2[last2] > nums1[last1]){
                nums1[len] = nums2[last2];
                len--;
                last2--;
            }else{
                nums1[len] = nums1[last1];
                len--;
                last1--;
            }
        }

        //如果last1 < 0 说明 nums2中还有元素，全部复制到nums1中
        for(int i = 0; i < last2+1 ; i++){
            nums1[i] = nums2[i];
        }
    }
}
